package com.qdxwx.data.service.manager;

import com.qdxwx.common.page.PageRequest;
import com.qdxwx.models.manager.Manager;
import com.qdxwx.models.manager.ManagerRole;
import com.qdxwx.models.teacher.Teacher;

import java.util.List;

/**
 * 用户 业务层
 * Qdx NetSchool Platform
 * @author qdxwx
 * @updateTime 2022/5/25
 * @description
 */
public interface ManagerService
{

    List<Manager> getList(Manager manager, PageRequest page);

    long count(Manager manager);

    /**
     * 查询已分配用户角色列表
     */
    List<Manager> getAllocatedList(Manager user,PageRequest page);

    long countAllocated(Manager manager);

    /**
     * 查询未分配用户角色列表
     */
    List<Manager> getUnallocatedList(Manager user,PageRequest page);

    long countUnallocated(Manager manager);

    /**
     * 通过用户名查询用户
     * 
     * @param managerName 用户名
     * @return 用户对象信息
     */
    Manager getByLoginName(String managerName);

    Manager getByMobile(String mobile);

    /**
     * 通过用户ID查询用户
     * 
     * @param managerId 用户ID
     * @return 用户对象信息
     */
    Manager get(int managerId);

    /**
     * 通过用户ID查询用户和角色关联
     * 
     * @param managerId 用户ID
     * @return 用户和角色关联列表
     */
    List<ManagerRole> getRolesByManagerId(int managerId);

    int delete(int id);

    /**
     * 保存用户信息
     * 
     * @param manager 用户信息
     * @return 结果
     */
    int insert(Manager manager);


    int updateWithAuth(Manager manager);

    /**
     * 修改用户详细信息
     * 
     * @param manager 用户信息
     * @return 结果
     */
    int update(Manager manager);

    /**
     * 用户授权角色
     * 
     * @param manager 管理员
     */
    void insertRoles(Manager manager);
    /**
     * 用户授权职位
     *
     * @param manager 管理员
     */
    void insertPosts(Manager manager);
    /**
     * 修改用户密码信息
     * 
     * @param manager 用户信息
     * @return 结果
     */
    int resetManagerPwd(Manager manager);

    boolean checkLoginName(String loginName);

    boolean checkMobile(String mobile);

    /**
     * 校验用户是否允许操作
     * 
     * @param manager 用户信息
     */
    void checkUserAllowed(Manager manager);

    /**
     * 根据用户ID查询用户所属角色组
     * 
     * @param managerId 用户ID
     * @return 结果
     */
    String getRoleGroup(int managerId);

    /**
     * 根据用户ID查询用户所属岗位组
     * 
     * @param managerId 用户ID
     * @return 结果
     */
    String getPostGroup(int managerId);

    /**
     * 用户状态修改
     * 
     * @param manager 用户信息
     * @return 结果
     */
    int updateDisabled(Manager manager);

    /**
     * 通过用户名/邮箱/手机查询用户
     * @param searchKey
     * @return
     */
    Manager getBySearchName(String searchKey);

    int insertByTeacher(Teacher teacher);

    int updateCombine(long userId1, long userId2);
}
